<?php
/*
    数组的排序函数
          sort()
          rsort()
          usort()
          asort()
          arsort()
          uasort()
          ksort()
          krsort()
          uksort()
          natsort()
          natcasesort()
          array_multisort()

    1、简单的数组排序
          sort()--从小到大    rsort()--从大到小 

    2、根据键名对数组排序    
          ksort()--从小到大   krsort()--从大到小

    3、根据元素的值对数组排序(值长度，保留键名和值)
          asort()--值降序排序  arsort()--值升序排序

    4、根据“自然数排序”法对数组排序
          natsort()--       natcasesort()--
    5、根据用户自定义规则对数组排序
          usort()     uasort()     uksort()
    6、多维数组的排序
       array_multisort()

    拆分、合并、分解、接合的数组函数
    1、array_slice()---从数组中取出一段（可设置4个参数）
    2、array_splice()---取出的值不返回，删除参数
    3、array_combine()---合并两个数组创建新的数组，其中
                         一个数组作为键名，一个数组作为键值
    4、array_merge()---把一个或多个数组合并为一个数组，假如
                       键名有重复，后面的替代前面的

    5、array_intersect()--计算两个或多个数组的交集

    数组与数据结构的函数
    1、使用数据实现堆栈
        array_push()---放入元素
        array_pop()----取出元素
    2、使用队列
        array_unshift()
        array_shift()
        unset()

    其他与数据操作有关的函数
    array_rand()
    shuffle()
    array_sum()
    range()





*/
//简单的数组排序
/*
     $arr=array(1,4,6,34,87,9,40,7);
     
     sort($arr);
     print_r($arr);

     rsort($arr);
     print_r($arr);
*/


//根据键名对数组排序
/*
$data=array(2=>"two",5=>"five",1=>"one",10=>"ten",4=>"four");

  ksort($data);
  print_r($data);

  krsort($data);
  print_r($data);
*/


//根据元素的值对数组排序
/*
$data=array(2=>"linux","a"=>"apache","k"=>"mysql","d"=>"php");

    asort($data);//降序
    print_r($data);

    arsort($data);//升序（值字符串长度从小到大）
    print_r($data);
*/  



//根据“自然数排序”法对数组排序
/*
$data=array("file1.txt","file11.txt","file2.txt","file22.txt");
   
   sort($data);//0-9优先顺序
   print_r($data);
   echo "<br><br><br>";

   natsort($data);//区分大小写
   print_r($data);
   echo "<br><br><br>";

   natcasesort($data);//不区分大小写
   print_r($data); 

*/

//根据用户自定义规则对数组排序
/*
    $lamp=array("linux","mysql","php","apache");
    usort($lamp,"sortbylen");//sortbylen：用户自定义按长度排序
    function sortbylen($one,$two){
    	if(strlen($one)==strlen($two)){//strlen:字符串长度
    		return 0;//等于0，长度一样，位置不变
    	}else{
    		return(strlen($one)>strlen($two))?1:-1;
    	 }

    }
    print_r($lamp);
*/


//多维数组的排序
/*
    $data=array(2,5,87,53,1,array(3,6,11,2));

    array_multisort($data);
    print_r($data);

*/

//array_slice()

   $lamp=array("linux","apache","mysql","php");

   //正数，从第二位开始取，取两个数
   print_r(array_slice($lamp,1,2));
   echo "<br><br>";

   //负数，从倒数第二位开始取，取一个数
   print_r(array_slice($lamp,-2,1));
   echo "<br><br>";

   //true,保留键名不变
   print_r(array_slice($lamp,1,2,true));
   echo "<br><br>";


//array_splice()
/*
   $lamp=array("linux","apache","mysql","php");
   
   array_splice($lamp,2,1);//删除mysql
   print_r($lamp);

*/


//array_combine();
/*
   $a=array("os","database","web","languege");
   $b=array("linux","mysql","apache","php");

   $c=array_combine($a,$b);//a作为键名，b作为键值
// $c=array_combine($b,$a);//b作为键名，a作为键值
   print_r($c);

*/


//array_merge()
/*
    $a1=array("os","database","web","languege");
    $a2=array("linux","mysql","apache","php");

    $a3=array_merge($a1,$a2);
    print_r($a3);
    echo "<br><br>";

*/


//array_intersect()
/*
    $a1=array("os","database","web","languege",3,2,65,7,8);
    $a2=array("linux","mysql","apache","php",1,4,3,65);
    
//  $a3=array_intersect($a1,$a2);//相同部分
    $a3=array_diff($a1,$a2);     //不同部分
    print_r($a3);

*/
//模拟栈:后进先出
 /*
   $a1=array("os","database","web","languege");
   $a1[]="one";//直接赋值
   $a1[]="two";//方式一：常用
   
   //往$a1中放入其他值
   array_push($a1,"thre","four");//方式二：可推任意个值

   $value=array_pop($a1);//取出值，从后往前，一次一个
   $value=array_pop($a1);//弹出值
   echo $value;

   print_r($a1);
*/

//模拟队列：先进先出，后进后出
/*
   $a1=array("os","database","web","languege");

   $a1[]="one";
   $a1[]="two";

   array_push($a1,"thre","four");

   $value=array_shift($a1);//从头开始删除元素,每次都是第一个
   echo $value;//输出该元素

   $value=array_unshift($a1,"www");//插入一个元素
   $value=array_unshift($a1,"bbbb");//每次从第一位开始
   echo $value;

   unset($a1[3]);//删除数组中某一元素，任意

   print_r($a1);
   echo "<br><br>";

*/

//   $arr=array(1,3,5,2,6,8,6,6,45,26,57,5,89,78,5,4,34);

//   echo array_rand($arr);//随机返回键名(下标)

//   echo $arr[array_rand($arr)];//通过下标取随机值

//   shuffle($arr);//对数组进行随机排序
//   print_r($arr);

//   echo array_sum($arr);//对数组内所有元素进行求和


//range(a,b,c)--有三个参数，a、最小值 b、最大值 c、步长
   //直接声明参数
    $arr=range(0,10);//从0到10的数组，也可反序(20,10);   
    print_r($arr);
    echo "<br><br>";

    $new=range(0,50,5);
    print_r($new);